// promise 可以解决的问题 
// 1. .then then
// 2. 可以同步多个异步请求的结果

const fs = require('fs').promises
// const fs = require('fs')



// read('./node/name.txt', 'utf8').then(data => {
//     console.log(data)
// }, err => {
//     console.log(err)
// })

// read('./node/age.txt', 'utf8').then(data => {
//     console.log(data)
// }, err => {
//     console.log(err)
// })

// 判断是不是 promise
// 可能不是 原生的 Promise
const isPromise = value => typeof value.then === 'function'
Promise.all = function (promises) {
    return new Promise((resolve, reject) => {
        // 并发（使用for 循环迭代执行） 和 串行 （借助回调 第一个完成后调用第二个）
        // 遍历 数组  依次拿到执行结果
        let arr = []
        let index = 0
        const processData = (key, data) => {
            arr[key] = data // 不能使用数组的长度来计算
            if(++ index === promises.length) {
                resolve(arr)
            }
            // if(arr.length == promises.length) {
            //     resolve(arr)
            // }
        }
        for(let i = 0; i < promises.length; i ++) {
            let result = promises[i]
            if(isPromise(result)) {
                result.then((data) => {
                    processData(i, data)
                }, reject)
            } else {
                processData(i, result)
            }
        }
    })
}

// 默认无法中断 只是 不采用返回的结果 fetch api
Promise.all([1, 2, fs.readFile('./node/name.txt', 'utf8'), fs.readFile('./node/age.txt', 'utf8')]).then(data => {
    console.log(data)
}) 